iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 17
1

當我們在建立任意專案的時候,常會看到這樣的寫法class Post < ActiveRecord::Base
我們知道<符號是繼承家產的概念 (疑?
但是ActiveRecord::Base中間的兩個冒號::代表是什麼意思呢?

如果去文件查看,會發現在模組ActiveRecord裡面有一個Base的類別,這表示Post這個類別,繼承ActiveRecord模組裡的Base類別。

module ActiveRecord
  #  ... 略
  class Base
    extend ActiveModel::Naming
    extend ActiveSupport::Benchmarkable
    extend ActiveSupport::DescendantsTracker

    extend ConnectionHandling
    extend QueryCache::ClassMethods
    # ... 略
  end
end

如果還不是很清楚,那我們另用點簡單的魔法技能例子來看,character它include Skill::Sorcery
因此可以成功拿到fireball方法

module Skill
  module Sorcery
    def fireball
      puts “Attack!”
    end
  end
end

def character
  include Skill::Sorcery
end

character.fireball       # Attack!

不論module或是class都可以互相包容,最後它會構成一個「巢狀結構」,這剛好拿來當namespace包裝。
那除了類別以及模組,使用常數Constant也是可以的

module Skill 
  module Sorcery
    Speed = "3s"
      def fireball
        puts "Attack!"
      end
  end
end

puts Skill::Sorcery::Speed      # 3s

千萬要記得在使用namespace::時,必需給正確完整的路徑才能執行,不然會出現錯誤喔。

參考連結:
Ruby 語法放大鏡之「有時候會看到有兩個冒號寫法是什麼意思?」


上一篇
Day16 |   認識 * 與 **
下一篇
Day18 | or-equals ||= 是什麼
系列文
從色彩繽紛到只看亂碼日子,學程式從 Ruby 出發!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言